<?php

class DatabaseObject_HelpPages extends DatabaseObject {

    public function __construct($db) {
        parent::__construct($db, 'help_pages', 'id');

        $this->add('title');
        $this->add('keywords');
        $this->add('description');
        $this->add('h1');
        $this->add('name');
        $this->add('content');
        $this->add('alias');
        $this->add('cat_id');
        $this->add('isPopular');
        $this->add('isRecommend');
    }

    public function loadCat() {
        /* $this->_cat = new DatabaseObject_HelpCategories($this->getDb());
          $this->_cat->load($this->cat_id); */
    }

    public function postLoad() {
        parent::postLoad();

        //$this->loadCat();

        return true;
    }

    /* public function getCat() {
      return $this->_cat;
      } */

    private static function _GetBaseQuery($db, $options) {
        // инициализация настроек
        $defaults = array();

        foreach ($defaults as $k => $v) {
            $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
        }

        // создание запроса на получение
        $select = $db->select();
        $select->from(array('p' => 'help_pages'), array());

        return $select;
    }

    public static function GetPages($db, $catId, $options = array()) {
        // инициализируем настройки
        $defaults = array(
            'where' => '',
            'offset' => 0,
            'limit' => 0,
            'order' => 'p.id'
        );

        foreach ($defaults as $k => $v) {
            $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
        }

        $select = self::_GetBaseQuery($db, $options);

        // поля для выборки
        $select->from(null, 'p.*');

        $select->where('cat_id = ?', $catId);

        // получим данные из базы
        $data = $db->fetchAll($select);

        // сделаем из полученных записей объекты класса
        $pages = self::BuildMultiple($db, __CLASS__, $data);
        $page_ids = array_keys($pages);

        if (count($page_ids) == 0)
            return array();

        /* foreach ($pages as $page) {
          $page->loadCat();
          } */

        return $pages;
    }

    public static function GetLast($db) {
        $select = self::_GetBaseQuery($db, array());

        // поля для выборки
        $select->from(null, 'p.*');
        $select->limit(10);

        $data = $db->fetchAll($select);

        // сделаем из полученных записей объекты класса
        $pages = self::BuildMultiple($db, __CLASS__, $data);
        $page_ids = array_keys($pages);

        if (count($page_ids) == 0)
            return array();

        return $pages;
    }

    public static function GetPopular($db) {
        $select = self::_GetBaseQuery($db, array());

        // поля для выборки
        $select->from(null, 'p.*');
        $select->where('isPopular = 1');

        $data = $db->fetchAll($select);

        // сделаем из полученных записей объекты класса
        $pages = self::BuildMultiple($db, __CLASS__, $data);
        $page_ids = array_keys($pages);

        if (count($page_ids) == 0)
            return array();

        return $pages;
    }

    public static function GetRecommend($db, $cat_id) {
        $select = self::_GetBaseQuery($db, array());

        // поля для выборки
        $select->from(null, 'p.*');
        $select->where('isRecommend = 1');

        $cat = new DatabaseObject_HelpCategories($db);
        $cat->load($cat_id);

        $cats = DatabaseObject_HelpCategories::GetCategories($db, $cat->getId());

        $catIds = array_keys($cats);

        $ids = implode(', ', $catIds);

        $select->where('cat_id in(' . $ids . ')');

        $data = $db->fetchAll($select);

        // сделаем из полученных записей объекты класса
        $pages = self::BuildMultiple($db, __CLASS__, $data);
        $page_ids = array_keys($pages);

        if (count($page_ids) == 0)
            return array();

        return $pages;
    }

    public static function Search($db, $q, $limit, $offset) {
        //$keywords = explode(' ', $q);
        $keywords = preg_split("#[0-9\W_]+#Disu", $q);
        $pages = array();

        for ($i = 0; $i < count($keywords); $i++) {
            $select = self::_GetBaseQuery($db, array());
            $select->from(null, 'p.*');
            $select->where('keywords like "%' . $keywords[$i] . '%" or name like "%' . $keywords[$i] . '%"');
            $select->limit($limit, $offset);
            
            $data = $db->fetchAll($select);

            // сделаем из полученных записей объекты класса
            $p_pages = self::BuildMultiple($db, __CLASS__, $data);            
            $pages = array_merge($pages, $p_pages);
        }
        $page_ids = array_keys($pages);
        if (count($page_ids) == 0)
            return array();

        return $pages;
    }

    public static function GetSearchCount($db, $q) {
        $keywords = preg_split("#[0-9\W_]+#Disu", $q);
        
        $count = 0;
        
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'count(*)');

        for ($i = 0; $i < count($keywords); $i++) {
            $select->where('keywords like "%' . $keywords[$i] . '%" or name like "%' . $keywords[$i] . '%"');
            
            $count += (int)$db->fetchOne($select);
        }
        
        return $count;
    }
}
